package main

import (
	"fmt"
)

// 递归
func factorial(n int) int {
	if n == 1 || n == 0 {
		return 1
	} else {
		return n * factorial(n-1)
	}
}

// 打印右下直三角形，
func triangle(m int) {
        // 一层循环，打印行数
	for i := 1; i <= m; i++ {
                // 二层循环，打印空格，使下面数字右对齐
		for j := m - i; j > 0; j-- {
			fmt.Print("   ")
		}
		// 打印数字及间隔
		for n := i; n > 0; n-- {
			fmt.Printf("%3d", n)
		}
		// 每一行打印完成后，换行
		fmt.Println()
	}
}

func main() {
	fmt.Println("~~~~~~~~~第1题~~~~~~~~~")
	var v int
	fmt.Print("请问你要求几的阶乘（大于等于0的正整数）：")
	fmt.Scan(&v)
	if v < 0 {
		panic("请输入正确的数字！")
	} else {
		fmt.Println(factorial(v))
	}
	fmt.Println("~~~~~~~~~第2题~~~~~~~~~")
	fmt.Print("请问你要打印几行右下直三角形（大于等于0的正整数）：")
	fmt.Scan(&v)
	if v < 0 {
		panic("请输入正确的数字！")
	} else {
		triangle(v)
	}
}

// 批改意见
// 可以将n<0时的处理逻辑直接放到函数中，更完美